package JDKtest.Java并发.Test;
//https://mp.weixin.qq.com/s?__biz=MzkyNTY4MDY3NA==&mid=2247487447&idx=1&sn=6d9a5a927edceaed333ea5fd4395489c&chksm=c0985be33f4232bd7556db0df71f1d5de8cd71d5296e1fac5cd3bdbfe15bdd26f5d79f03a4cc#rd
import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个固定大小的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(4);

        // 提交一个并发任务
        Future<Integer> future = executorService.submit(() -> {
            try {
                Thread.sleep(2000); // 模拟耗时操作
                return 42;
            } catch (InterruptedException e) {
                e.printStackTrace();
                return -1;
            }
        });


        // 主线程继续执行其他任务
        System.out.println("主线程正在执行其他任务...");

        // 获取并发任务的结果
        try {
            Integer result = future.get(); // 阻塞等待结果
            System.out.println("并发任务的结果: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        // 使用CompletableFuture实现异步任务
        CompletableFuture.runAsync(() -> {
            try {
                Thread.sleep(5000); // 模拟耗时操作
                System.out.println("耗时任务完成！");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, executorService);

        // 关闭线程池
        executorService.shutdown();
    }
}


//
//01.001-为什么学习并发
//01.002-课程组织和特色
//01.003-预备知识
//02.001-本章内容
//02.002-进程线程概念
//02.003-并行并发概念
//02.004-线程应用-异步调用
//02.005-线程应用-提升效率
//02.006-线程应用-提升效率-验证
//02.007-线程应用-提升效率-小结
//03.001-创建线程-方法1
//03.002-创建线程-方法2
//03.003-创建线程-lambda简化
//03.004-创建线程-方法1,2-原理
//03.005-创建线程-方法3
//03.006-线程运行-现象
//03.007-线程运行-查看和杀死-windows
//03.008-线程运行-查看和杀死-linux
//03.009-线程运行-jconsole
//03.010-线程运行原理-栈帧debug
//03.011-线程运行原理-栈帧图解
//03.012-线程运行原理-多线程
//03.013-线程运行原理-上下文切换
//03.014-常见方法-概述
//03.015-常见方法-start_vs_run
//03.016-常见方法-sleep_状态
//03.017-常见方法-sleep_打断
//03.018-常见方法-sleep_可读性
//03.019-常见方法-yield_vs_sleep
//03.020-常见方法-线程优先级
//03.021-常见方法-sleep应用
//03.022-常见方法-join
//03.023-常见方法-join-同步应用
//03.024-常见方法-join-限时同步
//03.025-常见方法-interrupt-打断阻塞
//03.026-常见方法-interrupt-打断正常
//03.027-设计模式-两阶段终止-interrupt
//03.028-设计模式-两阶段终止-interrupt分析
//03.029-设计模式-两阶段终止-interrupt实现
//03.030-设计模式-两阶段终止-interrupt细节
//03.031-常见方法-interrupt-打断park
//03.032-常见方法-过时方法
//03.033-常见方法-守护线程
//03.034-线程状态-五种
//03.035-线程状态-六种
//03.036-线程状态-六种-演示
//03.037-习题-应用之统筹-分析
//03.038-习题-应用之统筹-实现
//03.039-第三章小结
//04.001-本章内容
//04.002-小故事-线程安全问题
//04.003-上下文切换-分析
//04.004-临界区与竞态条件
//04.005-上下文切换-synchronized-解决
//04.006-上下文切换-synchronized-理解
//04.007-上下文切换-synchronized-理解
//04.008-上下文切换-synchronized-思考
//04.009-锁对象面向对象改进
//04.010-synchronized-加在方法上
//04.011-synchronized-加在方法上-习题1~2
//        04.012-synchronized-加在方法上-习题3~4
//        04.013-synchronized-加在方法上-习题5~8
//        04.014-线程安全分析
//04.015-线程安全分析-局部变量
//04.016-线程安全分析-局部变量引用
//04.017-线程安全分析-局部变量-暴露引用
//04.018-线程安全分析-常见类-组合调用
//04.019-线程安全分析-常见类-不可变
//04.020-线程安全分析-实例分析1~3
//        04.021-线程安全分析-实例分析4~7
//        04.022-习题-卖票-读题
//04.023-习题-卖票-测试方法
//04.024-习题-卖票-解题
//04.025-习题-转账
//04.026-Monitor-对象头
//04.027-Monitor-工作原理
//04.028-Monitor-工作原理-字节码角度
//04.029-synchronized优化原理-小故事
//04.030-synchronized优化原理-轻量级锁
//04.031-synchronized优化原理-锁膨胀
//04.032-synchronized优化原理-自旋优化
//04.033-synchronized优化原理-偏向锁
//04.034-synchronized优化原理-偏向锁-状态
//04.035-synchronized优化原理-偏向锁-撤销
//04.036-synchronized优化原理-偏向锁-批量重偏向
//04.037-synchronized优化原理-偏向锁-批量撤销
//04.038-synchronized优化原理-锁消除
//04.039-小故事-wait¬ify
//04.040-wait¬ify-工作原理
//04.041-wait¬ify-api-1
//        04.042-wait¬ify-api-2
//        04.043-wait vs sleep
//04.044-wait¬ify-正确姿势-step1
//04.045-wait¬ify-正确姿势-step2
//04.046-wait¬ify-正确姿势-step3~4
//        04.047-wait¬ify-正确姿势-step5
//04.048-设计模式-保护性暂停-定义
//04.049-设计模式-保护性暂停-实现
//04.050-设计模式-保护性暂停-扩展-增加超时
//04.051-设计模式-保护性暂停-扩展-增加超时-测试
//04.052-设计模式-join原理
//04.053-设计模式-保护性暂停-扩展-解耦等待和生产-分析
//04.054-设计模式-保护性暂停-扩展-解耦等待和生产-实现
//04.055-设计模式-保护性暂停-扩展-解耦等待和生产-测试
//04.056-设计模式-生产者消费者-定义
//04.057-设计模式-生产者消费者-实现
//04.058-设计模式-生产者消费者-测试
//04.059-park&unpark-基本使用
//04.060-park&unpark-原理
//04.061-线程状态转换-1
//        04.062-线程状态转换-2
//        04.063-线程状态转换-3~4
//        04.064-线程状态转换
//04.065-多把锁
//04.066-活跃性-死锁现象
//04.067-活跃性-定位死锁
//04.068-活跃性-死锁-哲学家就餐
//04.069-活跃性-活锁
//04.070-活跃性-饥饿
//04.071-ReentrantLock-简介
//04.072-ReentrantLock-可重入
//04.073-ReentrantLock-可打断
//04.074-ReentrantLock-锁超时
//04.075-ReentrantLock-锁超时-解决哲学家就餐
//04.076-ReentrantLock-公平锁
//04.077-ReentrantLock-条件变量-简介
//04.078-ReentrantLock-条件变量-使用例子
//04.079-设计模式-固定运行顺序-wait¬ify
//04.080-设计模式-固定运行顺序-park&unpark
//04.081-设计模式-交替输出-wait¬ify
//04.082-设计模式-交替输出-await&signal
//04.083-设计模式-交替输出-park&unpark
//04.084-第四章小结
//05.001-本章内容
//05.002-可见性-问题
//05.003-可见性-解决
//05.004-可见性 vs 原子性
//05.005-设计模式-两阶段终止-volatile
//05.006-设计模式-犹豫模式
//05.007-设计模式-犹豫模式-应用
//05.008-有序性-指令重排
//05.009-有序性-指令重排原理-指令并行优化
//05.010-有序性-指令重排-问题
//05.011-有序性-指令重排-验证
//05.012-有序性-指令重排-禁用
//05.013-volatile-原理-保证可见性
//05.014-volatile-原理-保证有序性
//05.015-volatile-原理-dcl-简介
//05.016-volatile-原理-dcl-问题分析
//05.017-volatile-原理-dcl-问题纠正
//05.018-volatile-原理-dcl-问题解决
//05.019-happens-before规则
//05.020-习题-balking模式
//05.021-习题-线程安全单例1
//05.022-习题-线程安全单例2~4
//        05.023-习题-线程安全单例5
//05.024-第五章小结
//06.001-本章内容
//06.002-保护共享资源-加锁实现
//06.003-保护共享资源-无锁实现
//06.004-cas-工作方式
//06.005-cas-慢动作分析
//06.006-cas-volatile
//06.007-cas-效率分析
//06.008-cas-特点
//06.009-原子整数-AtomicInteger
//06.010-原子整数-AtomicInteger-updateAndGet
//06.011-原子整数-AtomicInteger-updateAndGet原理
//06.012-原子引用-AtomicReference
//06.013-原子引用-ABA问题
//06.014-原子引用-AtomicStampedReference
//06.015-原子引用-AtomicMarkableReference
//06.016-原子数组
//06.017-原子数组
//06.018-原子更新器
//06.019-原子累加器
//06.020-LongAdder原理-cas锁
//06.021-LongAdder原理-缓存行伪共享
//06.022-LongAdder源码-add
//06.023-LongAdder源码-longAccumulate-cells未创建
//06.024-LongAdder源码-longAccumulate-cell未创建
//06.025-LongAdder源码-longAccumulate-cell已创建
//06.026-LongAdder源码-sum
//06.027-unsafe对象-获取
//06.028-unsafe对象-cas相关方法
//06.029-unsafe对象-模拟实现原子整数
//06.030-第六章小结
//07.001-本章内容
//07.002-不可变对象-使用
//07.003-不可变对象-设计
//07.004-享元模式-定义和体现
//07.005-享元模式-不可变线程安全辨析
//07.006-享元模式-自定义连接池-分析
//07.007-享元模式-自定义连接池-实现
//07.008-享元模式-自定义连接池-测试
//07.009-享元模式-自定义连接池-总结
//07.010-final-原理
//07.011-第七章小结
//08.001-本章内容
//08.002-自定义线程池-阻塞队列
//08.003-自定义线程池-阻塞队列-poll增强
//08.004-自定义线程池-线程池-实现
//08.005-自定义线程池-线程池-任务提交&Worker实现
//08.006-自定义线程池-线程池-take死等&poll超时
//08.007-自定义线程池-线程池-当任务队列已满
//08.008-自定义线程池-阻塞队列-offer增强
//08.009-自定义线程池-线程池-拒绝策略
//08.010-自定义线程池-线程池-拒绝策略-演示
//08.011-ThreadPoolExecutor-池状态
//08.012-ThreadPoolExecutor-构造方法
//08.013-ThreadPoolExecutor-构造方法
//08.014-Executors-固定大小线程池
//08.015-Executors-带缓冲线程池
//08.016-Executors-单线程线程池
//08.017-ThreadPoolExecutor-submit
//08.018-ThreadPoolExecutor-invokeAll
//08.019-ThreadPoolExecutor-invokeAny
//08.020-ThreadPoolExecutor-停止
//08.021-ThreadPoolExecutor-停止-演示
//08.022-设计模式-工作线程-定义
//08.023-设计模式-工作线程-饥饿-现象
//08.024-设计模式-工作线程-饥饿-解决
//08.025-设计模式-工作线程-池大小
//08.026-Timer的缺点
//08.027-ScheduledThreadPoolExecutor-延时执行
//08.028-ScheduledThreadPoolExecutor-定时执行
//08.029-正确处理线程池异常
//08.030-线程池应用-定时任务
//08.031-线程池应用-定时任务-测试
//08.032-tomcat-线程池
//08.033-tomcat-线程池-配置
//08.034-forkjoin-概念
//08.035-forkjoin-使用
//08.036-forkjoin-任务拆分优化
//08.101-aqs-概述
//08.102-aqs-自定义锁
//08.103-aqs-自定义锁-测试
//08.104-reentrantlock-加锁成功流程
//08.105-reentrantlock-加锁失败流程
//08.106-reentrantlock-解锁竞争成功流程
//08.107-reentrantlock-解锁竞争失败流程
//08.108-reentrantlock-锁重入原理
//08.109-reentrantlock-可打断原理
//08.110-reentrantlock-公平锁原理
//08.111-reentrantlock-条件变量-await
//08.112-reentrantlock-条件变量-signal
//08.113-reentrantreadwritelock-使用
//08.114-reentrantreadwritelock-注意事项
//08.115-reentrantreadwritelock-应用之缓存
//08.116-reentrantreadwritelock-应用之缓存-问题分析
//08.117-reentrantreadwritelock-应用之缓存-实现
//08.118-reentrantreadwritelock-应用之缓存-补充
//08.119-reentrantreadwritelock-原理-t1-w.lock
//08.120-reentrantreadwritelock-原理-t2-r.lock
//08.121-reentrantreadwritelock-原理-t3-r.lock&t4-w.lock
//08.122-reentrantreadwritelock-原理-t1-w.unlock
//08.123-reentrantreadwritelock-原理-t1-w.unlock
//08.124-reentrantreadwritelock-原理-t2-r.unlock t3-r.unlock
//08.126-stampedlock-作用
//08.127-stampedlock-演示
//08.128-semaphore-作用
//08.129-semaphore-演示
//08.130-semaphore-应用-改进数据库连接池
//08.131-semaphore-原理-acquire
//08.132-semaphore-原理-release
//08.135-countdownlatch-简介
//08.136-countdownlatch-改进
//08.137-countdownlatch-应用-等待多线程准备完毕
//08.138-countdownlatch-应用-等待多个远程调用结束
//08.139-future-应用-等待多个远程调用结束
//08.140-cyclicbarrier-问题
//08.141-cyclicbarrier-使用
//08.142-cyclicbarrier-注意
//08.143-线程安全集合类-概述
//08.144-concurrenthashmap-错误用法
//08.145-concurrenthashmap-computeifabsent
//08.146-concurrenthashmap-原理-hashmap-回顾
//08.147-concurrenthashmap-原理-hashmap-死链
//08.148-concurrenthashmap-原理-hashmap-死链
//08.149-concurrenthashmap-原理-hashmap-死链
//08.150-concurrenthashmap-8-原理-属性&内部类&方法
//08.151-concurrenthashmap-8-原理-构造
//08.152-concurrenthashmap-8-原理-get
//08.153-concurrenthashmap-8-原理-put
//08.154-concurrenthashmap-8-原理-put
//08.155-concurrenthashmap-8-原理-initable
//08.156-concurrenthashmap-8-原理-addcount
//08.157-concurrenthashmap-8-原理-size
//08.158-concurrenthashmap-8-原理-transfer
//08.159-concurrenthashmap-7-原理-结构
//08.160-concurrenthashmap-7-原理-定位segment
//08.161-concurrenthashmap-7-原理-put
//08.162-concurrenthashmap-7-原理-rehash
//08.163-concurrenthashmap-7-原理-rehash补充
//08.164-concurrenthashmap-7-原理-get
//08.165-concurrenthashmap-7-原理-size
//08.166-linkedblockingqueue-原理-入队出队
//08.167-linkedblockingqueue-原理-安全分析
//08.168-linkedblockingqueue-原理-put
//08.169-linkedblockingqueue-原理-vs array
//08.170-concurrentlinkedqueue
//08.171-copyonwritearraylist